package com.zrrd.threadMethods.callableDemo01;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @author WanJl
 * @version 1.0
 * @title MyCallableDemo
 * @description
 * @create 2024/6/16
 */
public class MyCallableDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //3、创建MyCallable类的对象
        //是为了线程开启后需要执行Callable实现类里的call方法
        MyCallable mc = new MyCallable();
        MyCallable mc1 = new MyCallable();
        //4、创建Future的实现类FutureTask对象，把MyCallable对象作为构造方法的参数
        //是为了获取线程执行完毕之后的结果(call方法的返回值)。
        //同时FutureTask对象也可以作为参数传递给Thread对象
        //从而启动线程
        FutureTask<Integer> future=new FutureTask<>(mc);
        FutureTask<Integer> future1=new FutureTask<>(mc1);
        //5、创建Thread类的对象，把FutureTask对象作为构造方法的参数
        //只有Thread类或者是其子类，才能调用start方法，启动一个线程
        Thread t=new Thread(future,"线程666");
        Thread t1=new Thread(future1,"线程777");
        //6、启动线程
        t1.start();
        t.start();

        //7、再调用get方法，就可以获取线程结束之后的结果。
        Integer i = future.get();
        System.out.println(i);

        System.out.println(Thread.currentThread().getName());
    }
}
